package io.xxx.xbutler.core.callback;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import io.xxx.xbutler.data.RobotMapper;
import io.xxx.xbutler.domain.Callback;
import io.xxx.xbutler.domain.Robot;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 登录失败回调
 * <p>
 * 1、商家获取二维码后，在二维码3分钟有效期内未扫码，会通过此回调通知商家，回调文案数据：“vcDescription”: “您3分钟内未扫码，二维码已失效，请重新获取二维码”
 * <p>
 * 2、商家登录，平台优先使用缓存登录方式登录，若缓存登录发起后，商家移动端微信上弹出确认按钮弹窗，并点击了取消按钮，则会通过此回调通知商家，回调文案数据：“vcDescription”: “移动端已取消确认登录”
 * <p>
 * 3、商家登录，使用扫码登录方式，商家移动端扫码后，弹出确认登录弹窗，并点击了取消按钮，则会通过此回调通知商家，回调文案数据：“vcDescription”: “移动端已取消扫码登录”
 *
 * <pre>
 * {
 *     "nType": 1004,
 *     "vcMerchantNo": "",
 *     "vcRobotWxId": "",
 *     "vcRobotSerialNo": "",
 *     "vcSerialNo": "",
 *     "nResult": 1,
 *     "vcResult": "SUCCESS",
 *     "Data": {
 *         "vcRelationSerialNo": "",
 *         "vcDescription": "",
 *         "vcOffnoticeReason": ""
 *     },
 *     "nTimeStamp": 1623812788547
 * }
 * </pre>
 */
@Slf4j
@Component
public class _1004Handler implements CallbackHandler {

    @Resource
    private RobotMapper robotMapper;

    @Override
    public String name() {
        return "登录失败回调";
    }

    @Override
    public boolean supports(int type) {
        return type == 1004;
    }

    @Override
    public void handle(Callback callback) {
        String serialNo = callback.getSerialNo();
        String robotId = callback.getRobotId();
        String robotSerialNo = callback.getRobotSerialNo();

        LambdaUpdateWrapper<Robot> wrapper = new LambdaUpdateWrapper<Robot>()
                .set(Robot::getOnline, false)
                .set(Robot::getUpdatedTime, LocalDateTime.now())
                .eq(Robot::getId, robotId);
        int count = robotMapper.update(wrapper);
        if (count == 0) {
            log.error("机器人信息不存在[serialNo:{}, robotId:{}, robotSerialNo:{}]", serialNo, robotId, robotSerialNo);
        }
    }
}
